import Vue from 'vue'
// import { Loading } from 'element-ui'
import '@/plugins/element.js'
import axios from 'axios'
// import qs from 'qs'
import { Storage } from '@/untils/common.js'
// import router from 'router'
axios.defaults.timeout = 10000 // 超时10s
if (process.env.NODE_ENV === 'development') {
  axios.defaults.baseURL = 'http://dxsd.test.com/'
}
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
// axios.defaults.crossDomain = true
// axios.defaults.withCredentials = true // 设置cross跨域 并设置访问权限 允许跨域携带cookie信息
// axios.defaults.headers.common['Authorization'] = '' // 设置请求头为 Authorization
// 配置发送请求前的拦截器 可以设置token信息
let loading = ''
const errMsg = 'timeout of 10000ms exceeded'
function startLoading() {
  loading = Vue.prototype.$loading({
    lock: true,
    fullscreen: true
  })
}
function endLoading() {
  if (loading) loading.close()
}
// 配置请求拦截器
axios.interceptors.request.use(
  (config) => {
    // loading开始
    startLoading()
    // config.headers.Authorization = 'fff' // 设置token
    // const a = 1
    // if (a === 1) {
    //   return Promise.reject(new Error('登录态失败，请重新登录'))
    // }
    // console.log(config)
    return config
  },
  (error) => {
    endLoading()
    return Promise.reject(error)
  }
)

// 配置响应拦截器
axios.interceptors.response.use(
  (res) => {
    // loading结束
    endLoading()

    // 这里面写所需要的代码
    if (res.data.code !== 200) {
      return Promise.reject(new Error(res.data.msg))
    }
    Vue.prototype.$message.success(res.data.msg)
    return Promise.resolve(res.data)
  },
  (error) => {
    endLoading()
    if (error.message === errMsg) {
      return Promise.reject(new Error('请求超时'))
    }
    return Promise.reject(error)
  }
)
/**
 * 集成所有请求方式
 * @param {String} method [请求方式get|post]
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function request(method, url, params) {
  return new Promise((resolve, reject) => {
    switch (method) {
      case 'get':
        axios
          .get(url, {
            params: params
          })
          .then((res) => {
            resolve(res)
          })
          .catch((err) => {
            reject(err)
          })
        break
      case 'post':
        var formData = new FormData()
        for (const key in params) {
          formData.append(key, params[key])
        }
        formData.append('token', Storage.get('token'))

        axios
          .post(url, formData)
          .then((res) => {
            resolve(res)
          })
          .catch((err) => {
            reject(err)
          })
        break
      default:
        reject(new Error('请求方式不允许'))
        break
    }
  })
}
